Position-based control of unmanned aerial vehicles

ABSTRACT

The position of a UAV within a three-dimensional space is changed based on a change in position of a controller of the UAV. First and second sensor data are produced using sensors of the controller to maintain stable altitude output for the UAV. The first sensor data indicates a geolocation of the controller, and the second sensor data indicates a barometric pressure of an environment in which the controller is located. The first and second sensor data are post-processed using a complementary filter based on respective altitude measurements of the first and second sensor data to determine an altitude of the controller. A position of the controller is determined within a three-dimensional space based on the altitude. Data indicative of the position of the controller within the three-dimensional space is then transmitted to the UAV to cause a change in a position of the UAV within the three-dimensional space.

CROSS REFERENCE TO RELATED APPLICATION(S)

This disclosure claims the benefit of U.S. Provisional Application No.62/564,386, filed Sep. 28, 2017, the disclosure of which is herebyincorporated by reference in its entirety.

TECHNICAL FIELD

This disclosure relates to position-based control of unmanned aerialvehicles (UAVs).

BACKGROUND

UAVs may be used for commercial and recreational purposes. A UAV may becontrolled using a remote device, such as a controller. A user mayinteract with user interface elements of the controller to cause achange in one or more of a position, orientation, or motion of the UAV.In the context of aerial photography, a user of the controller canposition the UAV to capture images or video of particular subjectswithin the environment in which the UAV operates.

SUMMARY

This disclosure describes, inter alia, systems and techniques forposition-based control of UAVs.

One aspect of the disclosure is a method for controlling a UAV. Themethod includes producing first sensor data and second sensor data. Thefirst sensor data indicates a geolocation of a controller of theunmanned aerial vehicle, and the second sensor data indicates abarometric pressure of an environment in which the controller islocated. The method further includes filtering the first sensor data andthe second sensor data based on a first altitude measurement of thefirst sensor data and a second altitude measurement of the second sensordata to determine an altitude of the controller. The method furtherincludes determining a position of the controller within athree-dimensional space based on the altitude. The method furtherincludes transmitting data indicative of the position of the controllerwithin the three-dimensional space to the unmanned aerial vehicle tocause a change in a position of the unmanned aerial vehicle within thethree-dimensional space.

Another aspect of the disclosure is a controller of a UAV. Thecontroller includes a first sensor that produces first sensor data basedon a geolocation of the controller. The controller further includes asecond sensor that produces second sensor data based on a barometricpressure of an environment in which the controller is located. Thecontroller further includes a sensor data filter mechanism that filtersa first altitude measurement of the first sensor data and a secondaltitude measurement of the second sensor data to produce filteredsensor data. The controller further includes a position determinationmechanism that determines a position of the controller within athree-dimensional space based on the filtered sensor data.

Another aspect of the disclosure is a non-transitory computer-readablestorage medium comprising processor-executable routines that, whenexecuted by a processor, facilitate a performance of operations forcontrolling a UAV. The operations include receiving, from a controllerof the unmanned aerial vehicle, data indicative of a position of thecontroller within a three-dimensional space. The data reflects analtitude of the controller determined by filtering geolocation data andbarometric data produced using sensors of the controller. The operationsfurther include adjusting a position of the unmanned aerial vehiclewithin the three-dimensional space according to the data.

These and other aspects of this disclosure are disclosed in thefollowing detailed description, the appended claims, and theaccompanying figures.

BRIEF DESCRIPTION OF THE DRAWINGS

The disclosed implementations have other advantages and features thatwill be more readily apparent from the detailed description, theappended claims, and the accompanying figures. A brief introduction ofthe figures is below.

FIG. 1A shows an example of a UAV.

FIG. 1B shows an example of the imaging device associated with the UAV.

FIG. 1C shows an example of a controller associated with the UAV.

FIG. 2 is a block diagram illustrating components of a computing device.

FIG. 3 shows an example of a relationship between a position of acontroller of a UAV and a position of the UAV.

FIG. 4 is a flowchart showing an example of a technique forposition-based control of a UAV performed at a controller.

FIG. 5 is a flowchart showing an example of a technique for determininga position of a controller in a three-dimensional space.

FIG. 6 is a flowchart showing an example of a technique for weighting analtitude measurement.

FIG. 7 is a flowchart showing another example of a technique forposition-based control of a UAV performed at the UAV.

FIG. 8 is a block diagram illustrating an example of components of acontroller of a UAV.

DETAILED DESCRIPTION

A UAV may include functionality for following a subject, such as forcapturing image or video data of the subject. For example, the UAV maybe configured to follow a particular person or item, such as a user ofthe UAV or a controller used to control the UAV. In some cases, theoperations for following the person or item can include usinggeolocation data to adjust a latitudinal or longitudinal position of theUAV. However, the geolocation data alone may not be useful foraccurately adjusting an altitude of the UAV. That is, because it isdifficult to measure changes in altitude using typical geolocationsystems (e.g., a global navigation satellite system (GNSS) device orcomponent), such measurements may be subject to relatively high accuracyerrors (e.g., ten to fifteen meters).

Other situations may also make it difficult to accurately measurechanges in altitude using a geolocation system. For example, duringoperation of the UAV, the UAV may be moved into a location where it maybe difficult to produce accurate geolocation data. For example, the UAVmay be piloted from an open-sky environment to a forest or likeenvironment with objects that block the sky from the UAV. A GNSS-basedsensor, such as a GPS component, may have difficulty producing accuratesensor data once the UAV is moved into the forest, for example, becausethe foliage of the forest blocks measurements by the GNSS-based sensor.In another example, weather-related changes (e.g., wind gusts) withinthe environment in which the UAV is operating or rapid motion by a useroperating the UAV may affect accurate measurements by a GNSS-basedsensor.

Implementations of this disclosure address problems such as these bycombining geolocation data with other sensor data, such as barometricsensor data, for position-based control of a UAV. First and secondsensor data are produced using sensors of the controller. The firstsensor data indicates a geolocation of the controller, and the secondsensor data indicates a barometric pressure of an environment in whichthe controller is located. The first and second sensor data are filteredbased on respective altitude measurements of the first and second sensordata to determine an altitude of the controller. A position of thecontroller is determined within a three-dimensional space based on thealtitude. Data indicative of the position of the controller within thethree-dimensional space is then transmitted to the unmanned aerialvehicle to cause a change in a position of the unmanned aerial vehiclewithin the three-dimensional space.

By post-processing the first sensor data and the second sensor data(e.g., using a complementary filter, as will be described below), thefirst and second sensor data can be used to dynamically determineaccurate altitude measurements for operating a UAV. That is, combiningand post-processing geolocation data and barometric pressure dataresults in a reduced accuracy error for altitude measurements. Theimplementations of this disclosure further address reducing accuracyerror based on user motion, such as by further filtering the firstand/or second sensor data based on motion information measured using amotion-sensitive sensor within the controller. The implementations ofthis disclosure thus result in a more stable altitude for a UAV.

The implementations of this disclosure will now be described in detailwith reference to the drawings, which are provided as examples so as toenable those skilled in the art to practice the technology. The figuresand examples are not meant to limit the scope of the present disclosureto a single implementation or embodiment, and other implementations andembodiments are possible by way of interchange of, or combination with,some or all of the described or illustrated elements. Whereverconvenient, the same reference numbers will be used throughout thedrawings to refer to same or like parts.

FIG. 1A shows an example of a UAV 100. In this implementation, the UAV100 has a quad-copter configuration; that is, the UAV 100 includes fourrotors 102. Each rotor 102 is driven by a separate electric motor (notshown). However, the UAV 100 may be another form of an aerial vehicle. Abattery pack (not shown) mounted on or in a body of the UAV 100 maysupply electrical power to all four electric motors, flight electronics(not shown) associated with operation of UAV 100, and an imaging device104 that provides still and video images by means of a communicationlink (not shown) to a ground-based user. The imaging device 104 may becoupled to a front of the UAV 100 using, for example, a movementmechanism 106.

In FIG. 1A, the movement mechanism 106 removably mounts the imagingdevice 104 to the UAV 100. The implementation of the movement mechanism106 shown in this example is a three-axis gimbal that permits theimaging device 104 to be rotated about three independent axes. However,the movement mechanism 106 may include another type of translationaland/or rotational elements that permit rotational and/or translationalmovement in one, two, or three dimensions of the imaging device 104 inrespect to the UAV 100.

FIG. 1B shows an example of the imaging device 104 associated with theUAV 100. In FIG. 1B, the imaging device 104 is a GoPro Hero4® or Hero5®camera; however, other types of imaging device 104 that can be coupledto the UAV 100, for example, through use of the movement mechanism 106,may be utilized. The imaging device 104 may include still image andvideo capture capabilities. FIG. 1B shows a lens 108 of the imagingdevice 104 and a display screen 110 associated with the imaging device104. Means for coupling the imaging device 104 to the UAV 100 and/or themovement mechanism 106 are not shown.

FIG. 1C shows an example of a controller 112. The controller 112includes a user interface 114 for operating the UAV 100. The controller112 may include a communications interface (not shown) via which thecontroller 112 may receive and send commands related to operation of theUAV 100, the imaging device 104, and the movement mechanism 106. Thecommands can include movement commands, configuration commands,operational control commands, and imaging commands. The controller 112may be a remote control, a smartphone, a tablet computer, a phablet, asmart watch, a portable computer, and/or another device configured toreceive user input and communicate information with the imaging device104, the movement mechanism 106, and/or the UAV 100.

For example, the orientation and motion (e.g., flight direction,attitude, and altitude) of the UAV 100 may be controlled by controllingspeeds of the motors that drive the respective rotors 102 of the UAV100. During flight, a GPS receiver on the UAV 100 may providenavigational data to the controller 112 for use in determining flightpaths and displaying the current location through the user interface114. A vision-based navigation system that tracks visually significantfeatures through image data captured by the imaging device 104 toprovide the necessary speed and position of the UAV 100 to thecontroller 112 may also be implemented.

The communications interface may utilize a wireless interfaceconfiguration, for example, WiFi, Bluetooth (BT), cellular data link,ZigBee, near-field communications (NFC) link (e.g., using ISO/IEC 14443protocol), ANT+ link, and/or other wireless communications link. In someimplementations, the communications interface may be effectuated using awired interface, for example, HDMI, USB, digital video interface,display port interface (e.g., digital display interface developed by theVideo Electronics Standards Association (VESA), Ethernet, Thunderbolt),and/or other interface.

The controller 112 may operate a software application (e.g., GoProStudio®, GoPro App®, and/or other application) configured to perform avariety of operations related to camera configuration, positioning ofthe movement mechanism 106, control of video acquisition, and/or displayof video captured by the imaging device 104 through the user interface114. For example, the software application may include functionality forusing data produced by sensors of the controller 112 to determine aposition of the controller 112 within a three-dimensional space. Thatsoftware application may further include functionality for transmittingthe determined position of the controller 112 to the UAV 100.

In another example, the software application may enable a user to createshort video clips and share video clips to a cloud service (e.g.,Instagram®, Facebook®, YouTube®, Dropbox®); perform full remote controlof functions of the imaging device 104; live preview video beingcaptured for shot framing; mark key moments while recording (e.g.,HiLight Tag®, View HiLight Tags in GoPro Camera Roll®) for locationand/or playback of video highlights; wirelessly control camera software;and/or perform other functions. Various methodologies may be utilizedfor configuring the imaging device 104 and/or displaying the capturedinformation.

FIG. 2 is a block diagram illustrating components of a computing device200. The computing device 200 may be a single component of the UAV 100,the imaging device 104, the movement mechanism 106, or the controller112. The computing device 200 may be multiple computing devicesdistributed in various ways between the UAV 100, the imaging device 104,the movement mechanism 106, or the controller 112. In the examplesdescribed, the computing device 200 may provide communication andcontrol functions to the various components described in reference toFIGS. 1A, 1B, and 1C.

The computing device 200 may include a processor 202. The processor 202may include a system on a chip (SoC), microcontroller, microprocessor,CPU, DSP, ASIC, GPU, or other processors that control the operation andfunctionality of the UAV 100, the imaging device 104, the movementmechanism 106, and/or the controller 112. The processor 202 mayinterface with mechanical, electrical, sensory, and power modules viadriver interfaces and software abstraction layers. Additional processingand memory capacity may be used to support these processes. Thesecomponents may be fully controlled by the processor 202. In someimplementations, one or more components may be operable by one or moreother control processes (e.g., a GPS receiver may include a processingapparatus configured to provide position and motion information to theprocessor 202 in accordance with a given schedule (e.g., values oflatitude, longitude, and elevation at 10 Hz)).

The computing device 200 may also include electronic storage 204 inwhich configuration parameters, image data, and/or code for functionalalgorithms may be stored. The electronic storage 204 may include asystem memory module that is configured to store executable computerinstructions that, when executed by the processor 202, control variousfunctions of the UAV 100, the imaging device 104, the movement mechanism106, and/or the controller 112. The electronic storage 204 may alsoinclude storage memory configured to store content (e.g., metadata,frames, video, and audio) captured by the imaging device 104 or sensorsassociated with the UAV 100, the movement mechanism 106, and/or thecontroller 112.

The electronic storage 204 may include non-transitory memory configuredto store configuration information and processing code configured toenable video information and metadata capture. The configurationinformation may include capture type (video, frames), image resolution,frame rate, burst setting, white balance, recording configuration (e.g.,loop mode), audio track configuration, and other parameters that may beassociated with audio, video, and metadata capture. Additionalelectronic storage 204 may be available for other hardware, firmware, orsoftware needs of the UAV 100, the imaging device 104, the movementmechanism 106, and/or the controller 112. The memory and processingcapacity may aid in the management of processing configuration (e.g.,loading, replacement) operations during a startup and/or otheroperations.

The computing device 200 may include or be in communication with one ormore sensors 206. The sensors 206 may include sensors associated withthe UAV 100, the imaging device 104, and/or the movement mechanism 106.The sensors may, for example, include an inertial measurement unit(IMU), an accelerometer, a gyroscope, a barometer, a magnetometer, acompass, a LIDAR sensor, a global positioning satellite (GPS) receiver,an altimeter, an ambient light sensor, a temperature sensor, a pressuresensor, a heart rate sensor, a depth sensor (such as radar, aninfrared-based depth sensor (e.g., a Kinect-style depth sensor), and astereo depth sensor), and/or other sensors. The imaging device 104 mayalso provide sensors and associated metadata, for example, imagesensors, a battery monitor, storage parameters, and other informationrelated to camera operation and capture of content. The sensors 206 mayobtain information related to an environment of the UAV 100 and aspectsin which the content is captured.

By way of non-limiting example, an accelerometer may provide motioninformation including acceleration vectors from which velocity vectorsmay be derived, and a barometer may provide pressure information fromwhich elevation may be derived. A gyroscope may provide orientationinformation, a GPS sensor may provide GPS coordinates and time foridentifying location, and an altimeter may obtain altitude information.The sensors 206 may be rigidly coupled to the UAV 100, the imagingdevice 104, the movement mechanism 106, and/or the controller 112, suchthat the processor 202 may be operable to synchronize various types ofdata produced by various ones of the sensors 206.

For example, using timing information, metadata information produced byones of the sensors 206 may be related to content (frame or video)captured by an image sensor. In some implementations, the metadatacapture may be decoupled from the video or frame capture. That is,metadata may be stored before, after, and in-between one or more videoclips or frames. In one or more implementations, the processor 202 mayperform operations on the received metadata to generate additionalmetadata information. For example, the processor 202 may integratereceived acceleration information to determine a velocity profile of theimaging device 104 during a recording of a video.

The computing device 200 may include or be in communication with audiosources 208, such as one or more microphones, configured to provideaudio information that may be associated with images acquired by theimaging device 104 or commands provided by the controller 112. Two ormore microphones may be combined to form a microphone system that isdirectional. Such a directional microphone system can be used todetermine the location of a sound source and to eliminate undesirablenoise originating in a particular direction. Various audio filters maybe applied as well. In some implementations, audio information may beencoded using AAC, AC3, MP3, linear PCM, MPEG-H, and other audio codingformats (audio codec). In one or more implementations of spherical videoand audio, the audio codec may include a 3-dimensional audio codec. Forexample, an Ambisonics codec can produce full surround audio including aheight dimension. Using a G-format Ambionics codec, a special decodermay not be required.

The computing device 200 may include or be in communication with a userinterface (UI) 210. The UI 210 may include a display configured toprovide information related to operation modes (e.g., camera modes,flight modes), connection status (e.g., connected, wireless, wired),power modes (e.g., standby, sensor, video), data produced by the sensors206 (e.g., heart rate, GPS, barometric), and/or other informationassociated with the UAV 100, the imaging device 104, the movementmechanism 106, and/or the controller 112. In some implementations, theUI 210 may include other devices capable of registering inputs from andcommunicating outputs to a user. These may include, without limitation,display, touch, gesture, proximity, light, sound receiving/emitting,wired/wireless, and/or other input/output devices. The UI 210 mayinclude a display, one or more tactile elements (e.g., joysticks,switches, buttons, and/or virtual touchscreen buttons), lights (e.g.,LED, LCD, or the like), speakers, and/or other interface elements.

The UI 210 may be configured to enable the user to provide commands tothe UAV 100, the imaging device 104, and/or the movement mechanism 106.For example, the user interface 114 shown in FIG. 1C is one example ofthe UI 210. User commands provided using the UI 210 may be encoded usinga variety of approaches, including but not limited to duration of abutton press (pulse width modulation), number of button presses (pulsecode modulation), or a combination thereof. For example, two shortbutton presses through the UI 210 may initiate a sensor acquisitionmode. In another example, a single short button press may be used tocommunicate (i) initiation of video or frame capture and cessation ofvideo or frame capture (toggle mode) or (ii) video or frame capture fora given time duration or number of frames (burst capture). Other usercommand or communication implementations may also be realized, such asone or more short or long button presses or toggles of a joystick.

The computing device 200 may include an input/output (I/O) module 212.The I/O module 212 may be configured to synchronize the imaging device104 with the controller 112, a second capture device, a smartphone,and/or a video server. The I/O module 212 may be configured tocommunicate information to and from various I/O components. The I/Omodule 212 may include a wired or wireless communications interface(e.g., Wi-Fi, Bluetooth, USB, HDMI, Wireless USB, Near FieldCommunication (NFC), Ethernet, a radio frequency transceiver, and otherinterfaces) configured to communicate to one or more external devices.The I/O module 212 may interface with LED lights, a display, a button, amicrophone, speakers, and other I/O components. In one or moreimplementations, the I/O module 212 may be coupled to an energy source,such as a battery or other DC electrical source.

The computing device 200 may include a communication module 214 coupledto the I/O module 212. The communication module 214 may include acomponent (e.g., a dongle) having an infrared sensor, a radio frequencytransceiver and antenna, an ultrasonic transducer, and/or othercommunications interfaces used to send and receive wirelesscommunication signals. In some implementations, the communication module214 may include a local (e.g., Bluetooth, Wi-Fi, or the like) or broadrange (e.g., 3G, Long Term Evolution (LTE) or the like) communicationsinterface configured to enable communications between the UAV 100, theimaging device 104, the movement mechanism 106, and/or the controller112.

The communication module 214 may employ communication technologiesincluding one or more of Ethernet, 802.11, worldwide interoperabilityfor microwave access (WiMAX), 3G, LTE, digital subscriber line (DSL),asynchronous transfer mode (ATM), InfiniBand, PCI Express AdvancedSwitching, and/or other communication technologies. By way ofnon-limiting example, the communication module 214 may employ networkingprotocols including one or more of multiprotocol label switching (MPLS),transmission control protocol/Internet Protocol (TCP/IP), User DatagramProtocol (UDP), hypertext transport protocol (HTTP), simple mailtransfer protocol (SMTP), file transfer protocol (FTP), and/or othernetworking protocols.

Information exchanged over the communication module 214 may berepresented using formats including one or more of hypertext markuplanguage (HTML), extensible markup language (XML), and/or other formats.One or more exchanges of information between the imaging device 104 andoutside devices, such as the controller 112, may be encrypted usingencryption technologies including one or more of secure sockets layer(SSL), transport layer security (TLS), virtual private networks (VPNs),Internet Protocol security (IPsec), and/or other encryptiontechnologies.

The computing device 200 may include a power system 216 that maymoderate a power supply based on the needs of the UAV 100, the imagingdevice 104, the movement mechanism 106, and/or the controller 112. Forexample, a battery, solar cell, inductive (contactless) power source,rectification, or other power supply housed within the UAV 100 may becontrolled by the power system 216 to supply power for the imagingdevice 104 and/or the movement mechanism 106 when in a coupled state asshown in FIG. 1A.

Implementations of the computing device 200 may include additional,fewer, or different components than those shown in FIG. 2. In someimplementations, the computing device 200 may include optics. Forexample, the optics may include a lens, such as the lens 108 shown inFIG. 1B. The lens may, for example, include a standard lens, macro lens,fisheye lens, zoom lens, special-purpose lens, telephoto lens, primelens, achromatic lens, apochromatic lens, process lens, wide-angle lens,ultra-wide-angle lens, infrared lens, ultraviolet lens, perspectivecontrol lens, or the like.

In some implementations, the computing device 200 may include an imagesensor. For example, the image sensor may be a charge-coupled device(CCD) sensor, active pixel sensor (APS), complementary metal-oxidesemiconductor (CMOS) sensor, N-type metal-oxide-semiconductor (NMOS)sensor, or the like, or a combination thereof. The image sensor may beconfigured to capture light waves gathered by optics of the computingdevice 200 and generate image data based on control signals from asensor controller. For example, the optics may include focus controllerfunctionality configured to control the operation and configuration of alens, such as for receiving light from an object and transmitting thereceived light to the image sensor. The image sensor may use thereceived light to generate an output signal conveying visual informationregarding an object. For example, the visual information may include oneor more of an image, a video, and other visual information.

In some implementations, the computing device 200 may be a firstcomputing device included in the UAV 100 and another computing device200 identical or similar to the computing device 200 may be a secondcomputing device included in the controller 112. For example, thecomputing device 200 of the UAV 100 may include a first set of sensors206 and the second computing device of the controller 112 may include asecond set of sensors that are identical or similar to the sensors 206.As such, the controller 112 may include sensors used to produce dataassociated with the position, orientation, motion, or like aspects ofthe controller 112. The data produced using the sensors of thecontroller 112 is separate from data produced using the sensors 206,which instead is associated with the position, orientation, motion, orlike aspects of the UAV 100.

FIG. 3 shows an example of a relationship between a position of acontroller 300 of a UAV 302 and a position of the UAV 302. Thecontroller 300 may, for example, be the controller 112 shown in FIG. 1C.The UAV 302 may, for example, be the UAV 100 shown in FIG. 1A. Thecontroller 300 is used to control the orientation and motion of the UAV302, for example, a position of the UAV 302 in a three-dimensionalspace. In some cases, the position of the UAV 302 can be controlledthrough input received at the controller 300, such as by a user of thecontroller 300 toggling one or more user interface elements to adjustthe position of the UAV 302. However, in at least some cases, theposition of the UAV 302 may be controlled based on a position of thecontroller 300 within the three-dimensional space.

The UAV 302 follows the controller 300 such that, when a position of thecontroller 300 changes, a corresponding change may be made to theposition of the UAV 302. There may be one or more defined operations forthe UAV 302 to follow the controller 300. For example, a first followoperation may include the UAV 302 maintaining a configurable distance304 to the controller 300 in a three-dimensional space. This firstfollow operation may further include maintaining a fixed angle 306between the controller 300 and the UAV 302. The fixed angle 306 maycorrespond to the configurable distance 304. For example, the fixedangle 306 may reflect an angle relative to an altitude 308 of thecontroller 300, and an altitude 310 of the UAV 302.

While the UAV 302 maintains the configurable distance 304 and fixedangle 306, the UAV 302 may change orientation, such as through pitch,yaw, or roll. For example, the UAV 302 may include a camera or likeimage and/or video capture component (e.g., the imaging device 104 shownin FIG. 1B). The UAV 302 can yaw about one axis and pitch about another,such as to keep the imaging device focused on a particular object orsubject.

In another example, a second follow operation may include not adjustinga position of the UAV 302 until the configurable distance 304 is met.For example, a change in position of the controller 300 may not resultin a change in position of the UAV 302 where the UAV 302 is less thanthe configurable distance 304 from the controller 300. However, if achange in position of the controller 300 causes the UAV 302 to be equalto or be greater than the configurable distance from the controller 300,the position of the UAV 302 may then be adjusted. The UAV 302 may stillchange orientation, such as through pitch, yaw, or roll, while in thesecond follow operation. There may be further or different followoperations used between the controller 300 and the UAV 302 than thefirst and second follow operations described above.

The altitudes 308 and 310 are with respect to an object 312 below thecontroller 300. The object 312 is an object over which the UAV 302 canbe operated. For example, the object 312 can be an outdoor element(e.g., a portion of ground, earth, rock, or the like; a topographicalphenomenon, such as a hill or bluff; a building or other structure; orthe like) or an indoor element (e.g., a portion of floor, stairs, or thelike). The altitude 308 reflects a distance between the controller 300and the object 312, such as along a Y-axis within a three-dimensionalspace. The altitude 310 reflects a distance between the UAV 302 and theobject 312, such as along the Y-axis within the three-dimensional space.

The position of the controller 300 can be determined using sensor dataproduced using one or more sensors 314 at the controller 300. Thesensors 314 may, for example, be the sensors 206 shown in FIG. 2. Thatis, the sensors 314 may include a barometer, a thermometer, an inertialmotion unit (e.g., a gyroscope, an accelerometer, a magnetometer, or thelike), a geolocation sensor (e.g., a GNSS-based sensor, for example,GPS, GLONASS, or Galileo), or the like, or a combination thereof.

The controller 300 may include a processor configured to executeinstructions for determining the position of the controller 300 in thethree-dimensional space based on the sensor data produced by ones of thesensors 314. For example, the position of the controller 300 may bedetermined by executing instructions to filter and combine sensor dataproduced using a GNSS-based sensor of the sensors 314 and a barometer ofthe sensors 314. Examples of techniques for determining the position ofthe controller 300 using sensor data are described below with respect toFIG. 4.

The position of the controller 300 may then be communicated to the UAV302, for example, by the controller 300 transmitting packetized dataindicative of the position of the controller 300 to the UAV 302 overWi-Fi. The UAV 302 includes an adjustment mechanism 316 that processesthe data received from the controller 300 to determine whether and byhow much to adjust a position of the UAV 302 based on the received data.Examples of techniques for adjusting a position of the UAV 302 based onthe position of the controller 300 are described below with respect toFIG. 5.

FIG. 4 is a flowchart showing an example of a technique 400 forposition-based control of a UAV performed at a controller. The technique400 can be performed, for example, using hardware and/or softwarecomponents of a controller of a UAV, such as the controller 300 shown inFIG. 3. Although the technique 400 is described with respect to a seriesof operations, the operations comprising the technique 400 may beperformed in orders other than those described herein. In someimplementations, the technique 400 may include additional, fewer, ordifferent operations than those described herein.

At 402, sensor data is produced using one or more sensors of acontroller of a UAV (e.g., the controller 300 and the UAV 302 shown inFIG. 3). The sensors may produce the sensor data by measuring aspects ofthe controller, the environment in which the controller is located, orthe like. In some cases, and for example, some or all of the sensor datamay reflect a temperature of the controller, such as may be measuredusing a thermometer within the controller. In another example, some orall of the sensor data may reflect a position of the controller, such asmay be measured using a GNSS-based sensor (e.g., a GPS component withinthe controller). As such, portions of the sensor data may be producedusing different sensors.

The sensor data produced at 402 includes first sensor data producedusing a GNSS-based sensor and second sensor data produced using abarometer. The first sensor data and the second sensor data can beprocessed to determine a position of the controller within athree-dimensional space. The first sensor data produced using theGNSS-based sensor may indicate a geolocation of the controller. However,a value of the first sensor data reflecting an altitude of thecontroller may not be stable due to a relatively high variation error(e.g., five to ten meters), such that the value of the first sensor datareflecting the altitude of the controller may not be usable to determinethe altitude of the controller.

Alternatively, the first sensor data may indicate the position of thecontroller within a two-dimensional space (e.g., based on latitudinaland longitudinal coordinates of the controller), but not an altitude ofthe controller (e.g., because the altitude otherwise indicated by thefirst sensor data is subject to a large accuracy error). In some cases,however, the quality of the value of the first sensor data reflectingthe altitude of the controller may be indicated by a horizontal positionerror of the GNSS-based sensor.

In contrast, the second sensor data produced using the barometerindicates a barometric pressure of an environment in which thecontroller is located. For example, the second sensor data may reflect abarometric pressure that, when referenced against known barometricpressures at altitudes, indicates an altitude of the controller. Thesecond sensor data has a relatively low variation error (e.g., twometers). The second sensor data may thus reflect a more accuratealtitude measurement for the controller.

At 404, the sensor data produced using ones of the sensors of thecontroller are filtered. Filtering the sensor data can includeprocessing the sensor data to remove noise, outliers, or the like, or acombination thereof. The filtering may be performed using one or morefilters, for example, an extended Kalman filter. Ones of the filters maybe applied individually to the first sensor data and the second sensordata. Alternatively, the filters may be applied to the first sensor dataand the second sensor data.

For example, the first sensor data can be filtered based on third sensordata, for example, produced using an IMU or like sensor of thecontroller. The IMU or like sensor may, for example, detect motion ofthe controller, such as based on an acceleration or deceleration of thecontroller caused by a human user moving the controller. The detectedmotion can be filtered from the first sensor data to result in a moreaccurate position of the controller, as may be indicated by dataproduced using the GNSS-based sensor.

In another example, the second sensor data can be filtered using a lowpass filter with a moving window of a defined length (e.g., tenseconds). The low pass filter can reduce the already relatively lowvariation error of raw barometric data (e.g., the second sensor data) toone meter or less. The low pass filter thus smooths the raw secondsensor data to improve the accuracy thereof. In yet another example, acomplementary filter can be used to fuse aspects of the first sensordata and the second sensor data. For example, because the altitudemeasurements of the first sensor data may be less accurate than thealtitude measurements of the second sensor data, the first sensor datamay be used as a reference by which to process the second sensor data.

The first sensor data and the second sensor data may be filtered basedon a first altitude measurement of the first sensor data and a secondaltitude measurement of the second sensor data to determine an altitudeof the controller. The filtering may be performed using a complementaryfilter that combines the filtered first sensor data produced using theGNSS-based sensor with the filtered second sensor data produced usingthe barometer. For example, combining the filtered first sensor datawith the filtered second sensor data may include fusing the filteredfirst sensor data and the filtered second sensor data according to acomplementary filter. Examples for filtering the first sensor data andthe second sensor data using a complementary filter are described belowwith respect to FIG. 5.

The low-pass filter used to smooth the second sensor data may in somecases cause a delay in processing the altitude of the controller ascompared to the real-time activity of a user of the controller. Forexample, when the controller moves in only a horizontal direction, thealtitude of the controller does not change, and there may thus not be adelay in processing, such as because the low pass filter may not beused. However, when the controller moves in a vertical direction, thelow pass filter may be used such that a delay in processing the secondsensor data may occur. The delay incurred from using the low pass filtercan be dependent upon a gain parameter used by the low pass filter toreduce noise in the second sensor data. For example, when the gainparameter is lower, the resulting delay may be lower.

A weighting function can be performed to dynamically control the gainparameter used by the low pass filter, such as to reduce the altitudedelay time when possible. For example, the weighting function caninclude using an alternate low pass filter with a small (e.g., onesecond) window and measuring a difference between a current filteroutput and the small window output. If that difference increases, thewindow length of the current filter output can be reduced.

At 406, a position of the controller within a three-dimensional space isdetermined based on the filtered sensor data. Determining the positionof the controller within the three-dimensional space includes combiningportions of the filtered first sensor data and the filtered secondsensor data to identify X-, Y-, and Z-axis coordinates of the controllerwithin the three-dimensional space. For example, the X- and Y-axiscoordinates can be identified based on the first sensor data producedusing the GNSS-based sensor, and the Z-axis coordinate can be identifiedas the altitude of the controller determined by filtering the firstsensor data and the second sensor data.

At 408, the position of the controller is transmitted to the UAVcontrolled using the controller. Transmitting the position of thecontroller can include transmitting packets in real-time to the UAVusing a wireless connection between the controller and the UAV (e.g.,Wi-Fi). A packet transmitted to the UAV may, for example, include anumber of (e.g., 20) position samples per second. The transmission may,for example, be over the User Datagram Protocol (UDP).

In some implementations, the first sensor data and the second sensordata may be combined before the filtering. For example, the technique400 can include operations for combining the sensor data produced at 402before the sensor data are filtered at 404. In such an implementation,the filtering at 404 may include applying one or more filters to thecombined first sensor data and second sensor data. The determining at406 may then include identifying X-, Y-, and Z-axis coordinatesrepresenting the position of the controller within a three-dimensionalspace based on the filtered and combined first sensor data and secondsensor data. Alternatively, the determining at 406 may then be omitted,such as where the combining results in the identification of the X-, Y-,and Z-axis coordinates representing the position of the controllerwithin the three-dimensional space.

In some implementations, the filtering can be omitted where the sensordata produced at 402 satisfies a threshold. For example, one or morethresholds representative of vertical or horizontal position error canbe specified to reflect a greatest acceptable error for the sensor data.In the event that either or both of the first sensor data or the secondsensor data does not satisfy the one or more thresholds, the technique400 can proceed to the filtering at 404 before determining the positionof the controller at 406. However, in the event that both of the firstsensor data and the second sensor data satisfy the one or morethresholds, the technique 400 can omit the filtering at 404 and proceedto the determining at 406.

In some implementations, the operations for determining the position ofthe controller at 406 can include processing multiple data values. Forexample, a first data value can be an altitude measurement of thefiltered second sensor data. A second data value can reflect adifference between an altitude measurement of the filtered second sensordata and an altitude measurement of sensor data previously producedusing the barometer of the controller. A third data value can reflect adifference between an altitude measurement of the filtered second sensordata and an altitude measurement of the filtered first sensor data. Forexample, the first data value can be processed along with the second andthird data values using a complementary filter, such as by smoothingthose three data values to determine a final altitude measurement forthe controller. That final altitude measurement can be combined withlatitudinal and longitudinal position data produced using the GNSS-basedsensor to determine the position of the controller.

FIG. 5 is a flowchart showing an example of a technique 500 fordetermining a position of a controller in a three-dimensional space. Thetechnique 500 can be performed, for example, using hardware and/orsoftware components of a controller of a UAV, such as the controller 300shown in FIG. 3. For example, the operations performed at 406 in FIG. 4for determining a position of a controller of a UAV can include theoperations comprising the technique 500. For example, the operationscomprising the technique 500 can be performed as part of a complementaryfilter for combining first sensor data produced using a GNSS-basedsensor of the controller and second sensor data produced using abarometer of the controller. Alternatively, the technique 500 can beperformed using hardware and/or software components of a UAV, such asthe UAV 302 shown in FIG. 3. Although the technique 500 is describedwith respect to a series of operations, the operations comprising thetechnique 500 may be performed in orders other than those describedherein. In some implementations, the technique 500 may includeadditional, fewer, or different operations than those described herein.

At 502, a sensor data quality is determined for sensor data producedusing a sensor of a controller of a UAV. The sensor data associated withthe sensor data quality can, for example, be first sensor data producedusing a GNSS-based sensor of the controller. The sensor data quality isdetermined by executing instructions associated with the production ofthe sensor data. For example, instructions performed by a softwaremodule or like mechanism associated with the GNSS-based sensor canprocess the first sensor data to determine a sensor data quality. Thesensor data quality may, for example, indicate a degree to which analtitude of the controller measured using the GNSS-based sensor isusable to determine the altitude of the controller. The sensor dataquality can be represented as a value, range of values, parameter, orthe like.

At 504, a determination is made as to whether a quality threshold issatisfied by the sensor data quality. For example, the sensor dataquality may reflect an amount of time since the sensor data wasproduced. The quality threshold may reflect a maximum amount of timethat the sensor data quality can reflect to be usable to determine thealtitude of the controller. For example, the quality threshold can betwo seconds, such that the quality threshold is satisfied where thesensor data quality is below the quality threshold (e.g., less than twoseconds).

At 506, responsive to a determination at 504 that the sensor dataquality satisfies the quality threshold, a delta value is calculated byapplying a window function using a smoothing window. The delta valuerepresents a difference between an altitude measurement of the firstsensor data produced using the GNSS-based sensor of the controller andan altitude measurement of the second sensor data produced using thebarometer of the controller. Calculating the delta value using thesmoothing window can include smoothing values of sensor data producedover a particular period of time within using a window function tocalculate a delta value based on the input values from the first sensordata and the second sensor data. Calculating the delta value using thesmoothing window can also or instead include applying a low pass filterto smooth one or both of the first sensor data or the second sensor dataprior to calculating the difference between the altitude measurements.Examples of applying a low pass filter to sensor data are describedabove with respect to FIG. 4.

At 508, the smoothing window used to calculate the delta value isadjusted. Adjusting the smoothing window can include temporally movingthe window to focus on a different period of time than was previouslyused to calculate the delta value. For example, once the delta value iscalculated, the smoothing window can be moved to a different period oftime so that it may be used to determine a new delta for new sensor datato be produced later. Adjusting the smoothing window can also or insteadinclude performing a weighting function against a gain value of the lowpass filter used to calculate the delta value in order to dynamicallycontrol a gain parameter used by the low pass filter. At 510, the deltavalue calculated at 506 is output. For example, the delta value can beoutput from a complementary filter for use in determining a position ofthe controller in a three-dimensional space.

Alternatively, at 512, responsive to a determination at 504 that thesensor data quality does not satisfy the quality threshold, a deltavalue is calculated between the altitude measurement of the first sensordata and the altitude measurement of the second sensor data withoutusing a smoothing window. For example, calculating the delta value at512 can include calculating a difference between those altitudemeasurements. At 514, the delta value calculated at 512 is smoothed.Smoothing the delta value calculated at 512 can include processing thatdelta value using a low pass filter. After the delta value is smoothedat 514, the technique proceeds to 510, where the delta value smoothed at514 is output, such as for use in determining a position of thecontroller in a three-dimensional space.

In some implementations, the determination at 504 can include comparingthe sensor data quality determined at 502 to multiple thresholds. Forexample, the technique 500 can proceed to 506 when the sensor dataquality satisfies a first threshold (e.g., by being less than a firstthreshold value, for example, two seconds), or the technique 500 canproceed to 512 when the sensor data quality satisfies a second threshold(e.g., by being greater than or equal to the first threshold value andless than a second threshold value, for example, ten seconds). In theevent that the sensor data quality does not satisfy either of the firstthreshold or the second threshold, the technique 500 can terminate. Insuch a case, the sensor data processed by performing the technique 500can be discarded or otherwise ignored.

In some implementations, the adjusting of the smoothing window at 508can be omitted. In such an implementation, the delta value calculatedusing the smoothing window can be output for determining the position ofthe controller at 510 immediately following the calculation thereof at506.

In some implementations, the technique 500 can include determining astatus of the GNSS-based sensor of the controller. For example,responsive to determining that the quality threshold is satisfied at504, the technique 500 can include determining whether the GNSS-basedsensor is active, such that it is producing sensor data in real-time ornot active, for example, because it has not produced sensor data in athreshold or otherwise configurable amount of time. If the GNSS-basedsensor is determined to be active, the first sensor data produced usingthe GNSS-based sensor can be included within the smoothing window tocalculate a delta value at 506. Otherwise, sensor data previouslyproduced using the GNSS-based sensor can be included within thesmoothing window instead of the first sensor data. In someimplementations, the determination as to whether the quality thresholdis satisfied at 504 can include a determination as to the status of theGNSS-based sensor of the controller.

FIG. 6 is a flowchart showing an example of a technique 600 forweighting an altitude measurement. At 602, an altitude measurementdifference is determined. For example, multiple windows can be used todetermine whether and by how much to weight a delta value indicative ofa controller altitude (e.g., the delta value output at 510 shown in FIG.5). For example, a long window may be used to determine a first altitudemeasurement of the filtered second sensor data. In another example, ashort window may be used to determine a second altitude measurement ofthe filtered second sensor data. The altitude measurement difference canthus be a difference between those first and second altitudemeasurements. Based on that altitude measurement difference, adetermination can be made as to whether to output a delta valuerepresenting a difference between first sensor data and second sensordata (e.g., as calculated at 506 or smoothed at 514 in FIG. 5) or toinstead weight that delta value based on the altitude measurementdifference.

The altitude measurement difference may reflect one or both of adifference in time between when the first and second altitudemeasurements were produced or a difference in the values of the firstand second altitude measurements. The operations comprising thetechnique 600 can be performed, for example, to adjust for movement ofthe controller caused by a user of the controller. As such, thetechnique 600 can be performed as part of or alongside the performanceof the technique 500 shown in FIG. 5.

At 604, those operations can first include determining whether thedifference between the first and second altitude measurements is lessthan a threshold distance (e.g., 1.5 meters). If it is, at 606, a seconddetermination is made as to whether the difference between when thefirst and second altitude measurements were respectively produced isless than a threshold amount of time (e.g., 0.5 seconds). If it is,then, at 608, the delta value calculated at 506 or smoothed at 514 isoutput at 510.

However, if at 610 the difference between the first and second altitudemeasurements is determined to be between a first threshold distance anda second threshold distance (e.g., greater than or equal to 1.5 metersand less than 2 meters) or otherwise not less than the threshold amountof time (e.g., 0.5 seconds), then at 612 a first weighted altitude valueis output at 510 instead of the delta value calculated at 506 orsmoothed at 514. If at 614 the difference between the first and secondaltitude measurements is determined to instead be between the secondthreshold distance and a third threshold distance (e.g., greater than orequal to 2 meters and less than 2.5 meters) and greater than or equal tothe threshold amount of time (e.g., 0.5 seconds), then at 616 a secondweighted altitude value is output at 510 instead of the delta valuecalculated at 506 or smoothed at 514. If at 618 the difference betweenthe first and second altitude measurements is greater than or equal tothe third threshold distance (e.g., 2.5 meters) and/or determined to benot less than the threshold amount of time (e.g., 0.5 seconds), then at620 a third weighted altitude value is output at 510 instead of thedelta value calculated at 506 or smoothed at 514. Otherwise, thetechnique 600 returns to 608, where the delta value calculated at 506 orsmoothed at 514 is output at 510.

FIG. 7 is a flowchart showing an example of a technique 700 forposition-based control of a UAV performed at the UAV. The technique 700can be performed, for example, using hardware and/or software componentsof a UAV, such as the UAV 302 shown in FIG. 3. For example, thetechnique 700 may be performed in whole or in part using an adjustmentmechanism of the UAV, such as the adjustment mechanism 316 shown in FIG.3. Although the technique 700 is described with respect to a series ofoperations, the operations comprising the technique 700 may be performedin orders other than those described herein. In some implementations,the technique 700 may include additional, fewer, or different operationsthan those described herein.

At 702, the UAV receives data from a controller of the UAV. The dataincludes data indicative of a position of the controller within athree-dimensional space. The data can be received as or in a number ofpackets received in real-time from the controller over a wirelessconnection between the controller and the UAV (e.g., Wi-Fi). A packetreceived at the UAV may, for example, include a number of (e.g., 20)position samples per second. The transmission may, for example, be overUDP. At 704, a timestamp is generated. The timestamp reflects a time atwhich the data is received at the UAV from the controller.

At 706, a determination is made as to whether a first threshold issatisfied. For example, the first threshold can reflect a configurablemaximum amount of time that may elapse between when the sensor data isproduced at the controller and a time indicated by the timestampgenerated at 704 for the data received at 702 to be used to adjust aposition of the UAV. In the event that the amount of time so elapseddoes not exceed the first threshold, and thus that the first thresholdis satisfied, the technique 700 proceeds to 708, at which the positionof the UAV is adjusted according to the data received at 702.

At 710, responsive to determining that the first threshold is notsatisfied, a determination is made as to whether a second threshold issatisfied. For example, the second threshold can reflect a configurablemaximum amount of time that may elapse between when the sensor data isproduced at the controller and a time indicated by the timestampgenerated at 704 for the UAV to remain in follow mode. In the event thatthe amount of time that has so elapsed does not exceed the secondthreshold, and thus that the second threshold is satisfied, thetechnique 700 proceeds to 712, at which the position of the UAV isadjusted according to sensor data previously received at the UAV fromthe controller. For example, a previously-received packet can be used toindicate the position of the controller instead of a packet received at702.

Adjusting the position of the UAV at 708 or 712 includes executinginstructions to cause the UAV to move from a first position to a secondposition. As will be described below, adjusting the position of the UAVat 708 or 712 may also include executing instructions to cause the UAVto change orientation, such as by pitch, yaw, or roll.

At 714, responsive to determining at 710 that the second threshold isnot satisfied, a follow mode of the UAV is ended. Ending the follow modecan include terminating a follow operation being performed by the UAV.The follow mode of the UAV is ended when neither of the first thresholdor the second threshold is satisfied. That is, the follow mode of theUAV may end, for example, because the accuracy of the positionmeasurement of the controller or of the UAV is not usable to effectivelymeasure the position of the controller or determine whether to adjust aposition of the UAV.

In some implementations, the technique 700 can include determining thata subject is outside of a field of view of an imaging component of theUAV (e.g., the imaging device 104 shown in FIG. 1B) and adjusting anorientation of the UAV to cause the subject to be within the field ofview. For example, the subject may be the controller. A field of view ofthe imaging component can be determined based on characteristics of theimaging component, such as a lens angle of the imaging component and asize of that lens. If the controller is not within a field of view ofthe imaging component of the UAV, the UAV can be adjusted, for example,by changing a pitch (e.g., a Gimbal pitch) of the UAV.

In some implementations, the operations for determining that a subjectis outside of a field of view of an imaging component of the UAV andadjusting an orientation of the UAV to cause the subject to be withinthe field of view can be performed wholly or partially by a controllerof the UAV. For example, the controller can detect a position andorientation (e.g., direction) of the imaging device and transmit data orinstructions to cause the UAV to change position or orientation suchthat the camera is directed toward the controller.

In some implementations, the technique 700 can include causing the UAVto enter a configurable safety zone based on the data received from thecontroller. For example, the UAV may include functionality fordetermining that the data received from the controller does notaccurately reflect a position of the controller (e.g., by comparing itagainst previous data received from the controller within a thresholdperiod of time). For example, if newly received data indicates that theposition of the controller has changed by 10 feet in half a second, theUAV can interpret this data to reflect an inaccurate positionmeasurement. In such a case, the position of the UAV may not be adjustedbased on the data received from the controller.

In some implementations, the operations for generating the timestamp anddetermining whether the first and second thresholds are satisfied at704, 706, and 710 can be omitted. For example, the operations fordetermining whether the data indicative of the position of thecontroller is usable to adjust a position of the UAV can be wholly madeat the controller instead of in part at the UAV. In someimplementations, the operations for generating the timestamp anddetermining whether the first and second thresholds are satisfied at704, 706, and 710 can be replaced with operations for determining amanner by which to adjust a position of the UAV based on the datareceived from the controller, such as based on determinations made atthe controller (e.g., the operations described with respect to FIG. 5).

FIG. 8 is a block diagram illustrating an example of components of acontroller 800 of a UAV (e.g., the UAV 302 shown in FIG. 3). Thecontroller 800 may, for example, be the controller 300 shown in FIG. 3.The controller 800 includes sensors 802, a sensor data filter mechanism804, and a position determination mechanism 806. Data produced usingones of the sensors 802 are processed by the sensor data filtermechanism 804 and the position determination mechanism 806 to generateposition data 808. The position data 808 reflects a position of thecontroller 800 within a three-dimensional space.

The controller 800 receives first sensor input 810 and second sensorinput 812. The first sensor input 810 and the second sensor input 812may reflect measurable aspects of an environment in which the controller800 is located. For example, the first sensor input 810 can reflect ageolocation of the controller 800, and the second sensor input 812 canreflect a barometric pressure around the controller 800. The firstsensor input 810 can be processed by a first sensor 814 of the sensors802. The second sensor input 812 can be processed by a second sensor 816of the sensors 802. For example, the first sensor 814 can be aGNSS-based sensor. In another example, the second sensor 816 can be abarometer. The first sensor 814 produces first sensor data based on thefirst sensor input 810. The second sensor 816 produces second sensordata based on the second sensor input 812.

The first sensor data and the second sensor data are processed by thesensor data filter mechanism 804 to filter the first sensor data and thesecond sensor data. For example, the sensor data filter mechanism 804may include functionality for processing the first sensor data and/orthe second sensor data using a Kalman filter, a low pass filter, acomplementary filter, or the like, or a combination thereof. The sensordata filter mechanism 804 may, for example, include functionality forperforming all or a portion of the operations at 404 in the technique400 of FIG. 4 or all or a portion of the operations in the technique 500of FIG. 5.

Subsequent to the filtering by the sensor data filter mechanism 804, thefiltered first and second sensor data are processed by the positiondetermination mechanism 806 to determine a position of the controller800 within a three-dimensional space. For example, the positiondetermination mechanism 806 can process altitude measurements of thefirst sensor data and the second sensor data to determine a finalaltitude measurement for the controller 800, which final altitudemeasurement reflects a change in altitude of the controller 800 such asfrom a last measured altitude of the controller 800. The positiondetermination mechanism 806 may, for example, perform all or a portionof the operations at 406 in the technique 400 of FIG. 4 or all or aportion of the operations in the technique 500 of FIG. 5.

Implementations of the controller 800 may include additional, fewer, ordifferent components than those shown in FIG. 8. In someimplementations, the sensor data filter mechanism 804 and the positiondetermination mechanism 806 may be combined into a single mechanism orother software module executable by a processor available to thecontroller 800. In some implementations, one or both of the sensor datafilter mechanism 804 or the position determination mechanism 806 can usedata stored in a buffer (not shown). For example, the data stored in thebuffer of the controller 800 can include data previously produced usingone or both of the first sensor 814 or the second sensor 816.

In some implementations, the controller 800 may include a signalprocessor (not shown) that causes the first sensor 814 and the secondsensor 816 to respectively produce first sensor data and second sensordata based on the first sensor input 810 and the second sensor input812. In some implementations, the controller 800 may include acommunications mechanism or like component (not shown) that transmitsthe position data 808 to a UAV.

Where certain elements of these implementations may be partially orfully implemented using known components, those portions of such knowncomponents that are necessary for an understanding of the presentdisclosure have been described, and detailed descriptions of otherportions of such known components have been omitted so as not to obscurethe disclosure.

In the present specification, an implementation showing a singularcomponent should not be considered limiting; rather, the disclosure isintended to encompass other implementations including a plurality of thesame component, and vice-versa, unless explicitly stated otherwiseherein.

Further, the present disclosure encompasses presently existing andfuture known equivalents to the components referred to herein by way ofillustration.

As used herein, the term “bus” is meant generally to denote any type ofinterconnection or communication architecture that may be used tocommunicate data between two or more entities. The “bus” could beoptical, wireless, infrared, or another type of communication medium.The exact topology of the bus could be, for example, standard “bus,”hierarchical bus, network-on-chip, address-event-representation (AER)connection, or other type of communication topology used for accessing,for example, different memories in a system.

As used herein, the terms “computer,” “computing device,” and“computerized device” include, but are not limited to, personalcomputers (PCs) and minicomputers (whether desktop, laptop, orotherwise), mainframe computers, workstations, servers, personal digitalassistants (PDAs), handheld computers, embedded computers, programmablelogic devices, personal communicators, tablet computers, portablenavigation aids, Java 2 Platform, Micro Edition (J2ME) equipped devices,cellular telephones, smartphones, personal integrated communication orentertainment devices, or literally any other device capable ofexecuting a set of instructions.

As used herein, the term “computer program” or “software” is meant toinclude any sequence of machine-cognizable operations which perform afunction. Such a program may be rendered in virtually any programminglanguage or environment including, for example, C/C++, C#, Fortran,COBOL, MATLAB™, PASCAL, Python, assembly language, markup languages(e.g., HTML, Standard Generalized Markup Language (SGML), XML, VoiceMarkup Language (VoxML)), as well as object-oriented environments suchas the Common Object Request Broker Architecture (CORBA), Java™(including J2ME, Java Beans), and/or Binary Runtime Environment (e.g.,Binary Runtime Environment for Wireless (BREW)).

As used herein, the terms “connection,” “link,” “transmission channel,”“delay line,” and “wireless” mean a causal link between any two or moreentities (whether physical or logical/virtual) which enables informationexchange between the entities.

As used herein, the terms “integrated circuit,” “chip,” and “IC” aremeant to refer to an electronic circuit manufactured by the patterneddiffusion of trace elements into the surface of a thin substrate ofsemiconductor material. By way of non-limiting example, integratedcircuits may include field programmable gate arrays (FPGAs), aprogrammable logic device (PLD), reconfigurable computer fabrics (RCFs),systems on a chip (SoC), application-specific integrated circuits(ASICs), and/or other types of integrated circuits.

As used herein, the term “memory” includes any type of integratedcircuit or other storage device adapted for storing digital data,including, without limitation, read-only memory (ROM), programmable ROM(PROM), electrically erasable PROM (EEPROM), dynamic random-accessmemory (DRAM), Mobile DRAM, synchronous DRAM (SDRAM), Double Data Rate 2(DDR/2) SDRAM, extended data out (EDO)/fast page mode (FPM), reducedlatency DRAM (RLDRAM), static RAM (SRAM), “flash” memory (e.g.,NAND/NOR), memristor memory, and pseudo SRAM (PSRAM).

As used herein, the terms “microprocessor” and “digital processor” aremeant generally to include digital processing devices. By way ofnon-limiting example, digital processing devices may include one or moreof digital signal processors (DSPs), reduced instruction set computers(RISCs), general-purpose complex instruction set computing (CISC)processors, microprocessors, gate arrays (e.g., FPGAs), PLDs, RCFs,array processors, secure microprocessors, ASICs, and/or other digitalprocessing devices. Such digital processors may be contained on a singleunitary IC die, or distributed across multiple components.

As used herein, the term “network interface” refers to any signal, data,and/or software interface with a component, network, and/or process. Byway of non-limiting example, a network interface may include one or moreof FireWire (e.g., FW400, FW110, and/or other variations), USB (e.g.,USB2), Ethernet (e.g., 10/100, 10/100/1000 (Gigabit Ethernet), 10-Gig-E,and/or other Ethernet implementations), MoCA, Coaxsys (e.g., TVnet™),radio frequency tuner (e.g., in-band or out-of-band, cable modem, and/orother radio frequency tuner protocol interfaces), Wi-Fi (802.11), WiMAX(802.16), personal area network (PAN) (e.g., 802.15), cellular (e.g.,3G, LTE/LTE-A/TD-LTE, GSM, and/or other cellular technology), IrDAfamilies, and/or other network interfaces.

As used herein, the term “Wi-Fi” includes one or more of IEEE-Std.802.11, variants of IEEE-Std. 802.11, standards related to IEEE-Std.802.11 (e.g., 802.11 a/b/g/n/s/v), and/or other wireless standards.

As used herein, the term “wireless” means any wireless signal, data,communication, and/or other wireless interface. By way of non-limitingexample, a wireless interface may include one or more of Wi-Fi,Bluetooth, 3G (3GPP/3GPP2), High Speed Downlink Packet Access/High SpeedUplink Packet Access (HSDPA/HSUPA), Time Division Multiple Access(TDMA), Code Division Multiple Access (CDMA) (e.g., IS-95A, WidebandCDMA (WCDMA), and/or other wireless technology), Frequency HoppingSpread Spectrum (FHSS), Direct Sequence Spread Spectrum (DSSS), GlobalSystem for Mobile communications (GSM), PAN/802.15, WiMAX (802.16),802.20, narrowband/Frequency Division Multiple Access (FDMA), OrthogonalFrequency Division Multiplex (OFDM), Personal Communication Service(PCS)/Digital Cellular System (DCS), LTE/LTE-Advanced (LTE-A)/TimeDivision LTE (TD-LTE), analog cellular, cellular Digital Packet Data(CDPD), satellite systems, millimeter wave or microwave systems,acoustic, infrared (i.e., IrDA), and/or other wireless interfaces.

As used herein, the term “robot” may be used to describe an autonomousdevice, autonomous vehicle, computer, artificial intelligence (AI)agent, surveillance system or device, control system or device, and/orother computerized device capable of autonomous operation.

As used herein, the terms “camera,” or variations thereof, and “imagecapture device,” or variations thereof, may be used to refer to anyimaging device or sensor configured to capture, record, and/or conveystill and/or video imagery which may be sensitive to visible parts ofthe electromagnetic spectrum, invisible parts of the electromagneticspectrum (e.g., infrared, ultraviolet), and/or other energy (e.g.,pressure waves).

While certain aspects of the technology are described in terms of aspecific sequence of steps of a method, these descriptions areillustrative of the broader methods of the disclosure and may bemodified by the particular application. Certain steps may be renderedunnecessary or optional under certain circumstances. Additionally,certain steps or functionality may be added to the disclosedimplementations, or the order of performance of two or more steps may bepermuted. All such variations are considered to be encompassed withinthe disclosure.

While the above detailed description has shown, described, and pointedout novel features of the disclosure as applied to variousimplementations, it will be understood that various omissions,substitutions, and changes in the form and details of the devices orprocesses illustrated may be made by those skilled in the art withoutdeparting from the disclosure. The foregoing description is in no waymeant to be limiting, but rather should be taken as illustrative of thegeneral principles of the technology.

What is claimed is:
 1. A method for controlling an unmanned aerialvehicle, the method comprising: producing first sensor data and secondsensor data, the first sensor data indicating a geolocation of acontroller of the unmanned aerial vehicle, the second sensor dataindicating a barometric pressure of an environment in which thecontroller is located; filtering the first sensor data and the secondsensor data based on a first altitude measurement of the first sensordata and a second altitude measurement of the second sensor data todetermine an altitude of the controller by: determining a sensor datavalue for one or both of the first sensor data or the second sensordata, determining whether the sensor data value satisfies a firstthreshold, determining whether the sensor data value satisfies a secondthreshold, wherein the sensor data value reflects a value measured usinga first sensor that produced the first sensor data, wherein the sensordata value satisfies the first threshold when the value is less than afirst threshold value, wherein the sensor data value satisfies thesecond threshold when the value is greater than the first thresholdvalue and less than a second threshold value, determining a delta valuereflecting a difference between the first altitude measurement and thesecond altitude measurement using a smoothing window, and determiningthe altitude of the controller based on the delta value; determining aposition of the controller within a three-dimensional space based on thefirst sensor data, the second sensor data and the altitude; andtransmitting data indicative of the position of the controller withinthe three-dimensional space to the unmanned aerial vehicle to cause achange in a position of the unmanned aerial vehicle within thethree-dimensional space.
 2. The method of claim 1, wherein determiningthe delta value reflecting the difference between the first altitudemeasurement and the second altitude measurement comprises: calculatingthe delta value by applying a window function using the smoothing windowagainst the first altitude measurement and the second altitudemeasurement to determine a moving window average for the first altitudemeasurement and the second altitude measurement.
 3. The method of claim2, further comprising: subsequent to calculating the delta value byapplying the smoothing window function against the first altitudemeasurement and the second altitude measurement, adjusting the smoothingwindow.
 4. The method of claim 1, further comprising: responsive todetermining that the sensor data value does not satisfy the first orsecond threshold, determining the delta value by calculating thedifference between the first altitude measurement and the secondaltitude measurement.
 5. The method of claim 4, further comprising:subsequent to determining the delta value by calculating the differencebetween the first altitude measurement and the second altitudemeasurement, smoothing the delta value using a low pass filter.
 6. Themethod of claim 1, further comprising: responsive to determining thatthe sensor data value does not satisfy the first threshold or the secondthreshold, discarding one or both of the first sensor data or the secondsensor data.
 7. The method of claim 1, further comprising: determiningan altitude measurement difference between the second sensor data andsensor data previously produced using a sensor that produced the secondsensor data using a low pass filter with a gain parameter, wherein thealtitude of the controller is determined using the barometric pressuredifference.
 8. The method of claim 7, wherein the gain parameter isdynamically controlled by performing a weighting function based on adifference between the second altitude measurement and an altitudemeasurement of the sensor data previously produced using the sensor thatproduced the second sensor data.
 9. A controller of an unmanned aerialvehicle, comprising: a first sensor that produces first sensor databased on a geolocation of the controller; a second sensor that producessecond sensor data based on a barometric pressure of an environment inwhich the controller is located; a sensor data filter mechanism thatfilters a first altitude measurement of the first sensor data and asecond altitude measurement of the second sensor data to producefiltered sensor data by: determining a sensor data value for one or bothof the first sensor data or the second sensor data, determining whetherthe sensor data value satisfies a first threshold, determining whetherthe sensor data value satisfies a second threshold, wherein the sensordata value reflects a value measured using a first sensor that producedthe first sensor data, wherein the sensor data value satisfies the firstthreshold when the value is less than a first threshold value, whereinthe sensor data value satisfies the second threshold when the value isgreater than the first threshold value and less than a second thresholdvalue, determining a delta value reflecting a difference between thefirst altitude measurement and the second altitude measurement using asmoothing window, and determining the altitude of the controller basedon the delta value; and a position determination mechanism thatdetermines a position of the controller within a three-dimensional spacebased on the first sensor data, the second sensor data and the filteredsensor data.
 10. The controller of claim 9, wherein the instructionsinclude instructions to: calculate the delta value by applying a windowfunction using the smoothing window against the first altitudemeasurement and the second altitude measurement to determine a movingwindow average for the first altitude measurement and the secondaltitude measurement.
 11. The controller of claim 9, further comprising:responsive to a determination that the sensor data value does notsatisfy the first threshold or the second threshold, determine the deltavalue by calculating the difference between the first altitudemeasurement and an altitude measurement of sensor data previouslyproduced using the second sensor.
 12. The controller of claim 9, furthercomprising: a third sensor that produces third sensor data based onmovement of a user of the controller, wherein the sensor data filtermechanism filters one or more of the first altitude measurement or thesecond altitude measurement according to the third sensor data.
 13. Thecontroller of claim 9, further comprising: a buffer that stores sensordata previously produced using one or both of the first sensor or thesecond sensor, wherein the sensor data filter mechanism filters thefirst altitude measurement and the second altitude measurement using thesensor data stored in the buffer.
 14. A non-transitory computer-readablestorage medium, comprising processor-executable routines that, whenexecuted by a processor, facilitate a performance of operations forcontrolling an unmanned aerial vehicle, the operations comprising:filtering first sensor data and second sensor data based on a firstaltitude measurement of the first sensor data and a second altitudemeasurement of the second sensor data to determine an altitude of acontroller of the unmanned aerial vehicle by: determining a sensor datavalue for one or both of the first sensor data or the second sensordata, determining whether the sensor data value satisfies a firstthreshold, determining whether the sensor data value satisfies a secondthreshold, wherein the sensor data value reflects a value measured usinga first sensor that produced the first sensor data, wherein the sensordata value satisfies the first threshold when the value is less than afirst threshold value, wherein the sensor data value satisfies thesecond threshold when the value is greater than the first thresholdvalue and less than a second threshold value, determining a delta valuereflecting a difference between the first altitude measurement and thesecond altitude measurement using a smoothing window, and determiningthe altitude of the controller based on the delta value; receiving, fromthe controller, data indicative of a position of the controller within athree-dimensional space, the data reflecting the altitude of thecontroller; and adjusting a position of the unmanned aerial vehiclewithin the three-dimensional space according to the data.
 15. Thenon-transitory computer-readable storage medium of claim 14, theoperations further comprising: generating a first timestamp indicativeof a time at which the data is received from the controller; anddetermining whether a difference between the first timestamp and asecond timestamp indicative of a time at which the data was producedusing the sensors of the controller exceeds a threshold, wherein theoperations for adjusting the position of the unmanned aerial vehiclewithin the three-dimensional space according to the data are performedresponsive to determining that the difference does not exceed thethreshold.
 16. The non-transitory computer-readable storage medium ofclaim 15, the operations further comprising: responsive to determiningthat the difference exceeds the threshold, terminating a follow mode ofthe unmanned aerial vehicle.
 17. The non-transitory computer-readablestorage medium of claim 14, the operations further comprising: adjustingan orientation of the unmanned aerial vehicle to cause the controller tobe located within a field of view of an imaging device of the unmannedaerial vehicle.